package feri.pkg;



import java.util.List;

import feri.baza.DBHelper;
import feri.rest.JsonParser;
import feri.rest.RestClient;
import feri.rest.RestClient.RequestMethod;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class TuristicniPrirocnikActivity extends ListActivity {

	String zadnjaNadKategorija = null;
	Cursor trenutneKategorije = null;
	Context kontekst;
	String[] from = { "_naziv" };
	int[] to= { R.id.list_itemtext };
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		kontekst = this;
		DBHelper db = new DBHelper(this);
		db.open();
		Cursor nadKategorije = db.vrniNadkategorije();
		zadnjaNadKategorija = vrniZadnjoKategorijo(nadKategorije);
		db.close();
		
		
		setListAdapter(new SimpleCursorAdapter(this, R.layout.main,
				nadKategorije, from, to));

		getListView().setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> myAdapter, View myView,
					int position, long mylng) {
				Cursor c = (Cursor) getListView().getItemAtPosition(position);
				DBHelper db = new DBHelper(kontekst);
				db.open();
				int j =c.getColumnIndex("_id");
				Cursor podKategorije = db.vrniPodkategorije(c.getInt(c.getColumnIndex("_id")));
				
				
				if (podKategorije.getCount() > 0) {
					setListAdapter(new SimpleCursorAdapter(kontekst,R.layout.main, podKategorije, from, to));
					trenutneKategorije = podKategorije;
				} else {
					int nadk = db.vrniNadKategorijo(c.getInt(c.getColumnIndex("_id")));
					if(nadk == 6){
						LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
						//LocationListener ll = new mojListener();
						//lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
						
						double x = 0;
						double y=0;
						Cursor lokacijeDogodki = null;
						
						 List<String> providers = lm.getProviders(true);
					       
					     Location l = null;
						        
						       for (int i=providers.size()-1; i>=0; i--) {
						                l = lm.getLastKnownLocation(providers.get(i));
						                if (l != null) break;
						        }
						        
						        if (l != null) {
						                x = l.getLatitude();
						                y = l.getLongitude();
						        }
						        
						  Location lokacija = new Location("od");
							lokacija.setLatitude(x);
							lokacija.setLongitude(y);
							
							
							
							Location lokacijaDo = new Location("do");
							
							lokacijeDogodki = db.vrniLokacije(c.getInt(c.getColumnIndex("_id")));
							lokacijeDogodki.moveToFirst();
							
							double nRazdalja = 10000000000000000000000.0;
							int nIndex =0;
							
							int i =0;
							while(lokacijeDogodki.isAfterLast() == false){
								
								
								double dx = lokacijeDogodki.getDouble(lokacijeDogodki.getColumnIndex("_x"));
								double dy = lokacijeDogodki.getDouble(lokacijeDogodki.getColumnIndex("_y"));
								lokacijaDo.setLatitude(dx);
								lokacijaDo.setLongitude(dy);
								
								if(nRazdalja >lokacija.distanceTo(lokacijaDo)){
									nRazdalja = lokacija.distanceTo(lokacijaDo);
									nIndex = i;
								}
								
								i++;
								lokacijeDogodki.moveToNext();
							}						
							
							lokacijeDogodki.moveToPosition(nIndex);
							Intent next = new Intent(kontekst, TabiActivity.class);
							
							next.putExtra("vrsta", "Lokacije");
							next.putExtra("id", lokacijeDogodki.getInt(lokacijeDogodki.getColumnIndex("_id")));
							next.putExtra("naziv",lokacijeDogodki.getString(lokacijeDogodki.getColumnIndex("_naziv")));
							next.putExtra("opis",	lokacijeDogodki.getString(lokacijeDogodki.getColumnIndex("_opis")));
							next.putExtra("naslov",	lokacijeDogodki.getString(lokacijeDogodki.getColumnIndex("_naslov")));
							next.putExtra("x",lokacijeDogodki.getDouble(lokacijeDogodki.getColumnIndex("_x")));
							next.putExtra("y",lokacijeDogodki.getDouble(lokacijeDogodki.getColumnIndex("_y")));
							next.putExtra("kategorijaID",	lokacijeDogodki.getInt(lokacijeDogodki.getColumnIndex("_kategorijaId")));

							startActivity(next);
					}else{
					
						Intent naslednjaStran = new Intent(kontekst,IzpisLokacijDogodkovActivity.class);
						naslednjaStran.putExtra("izbranaKategorijaID", c.getInt(c.getColumnIndex("_id")));
						naslednjaStran.putExtra("izbranaKategorijaNaziv", c.getString(c.getColumnIndex("_naziv")));
						startActivity(naslednjaStran);
					}
				}
				db.close();
			}
		});

	}
	
	//vračam zadnjo, ker cursor pri trenutnih kategorijah vrača zadnjo in ne prvo :)
	private String vrniZadnjoKategorijo(Cursor cursor) {
		cursor.moveToLast();
		String k = cursor.getString(1);
		return k;
	}
	
	@Override  
	  public boolean onCreateOptionsMenu(Menu menu) {  
	    menu.add("Sinhronizacija");  
	   
	    return super.onCreateOptionsMenu(menu);  
	  }  
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		
		DBHelper dbh = new DBHelper(this);
		JsonParser jps = new JsonParser();
		Boolean posodobitevDogodek=true;
		Boolean posodobitevLokacija=true;
		Boolean posodobitevKategorija=true;
		dbh.open();
		
		//kategorija
		//String url="http://164.8.7.88:8080/RestStoritve/resources/rest.kategorija/sync/2012-01-17%2008:12:13";
		//String url="http://164.8.218.3:8080/RestStoritve/resources/rest.kategorija/sync/"+dbh.vrniDatumPosodobitve(1);

		String url="http://164.8.218.3:8080/RestStoritve/resources/rest.kategorija/sync/"+dbh.vrniDatumPosodobitve(1);
       	RestClient clientKategorija = new RestClient(url);
    	clientKategorija.AddHeader("Accept", "application/json");
    	try {
    	    clientKategorija.Execute(RequestMethod.GET);
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}

    	String responseKategorija = clientKategorija.getResponse();
    	System.out.println("odziv::"+responseKategorija+":"+responseKategorija.length());
    	System.out.println(responseKategorija.substring(0,2));
    	if (responseKategorija.substring(0, 2).equals("[]")) posodobitevKategorija=false;
    	else {jps.parsajKategorija(responseKategorija, dbh);}
    	

   	// dogodek
    	url="http://164.8.218.3:8080/RestStoritve/resources/rest.dogodek/sync/"+dbh.vrniDatumPosodobitve(3);
    	RestClient clientDogodek = new RestClient(url);
    	clientDogodek.AddHeader("Accept", "application/json");
    	try {
    	    clientDogodek.Execute(RequestMethod.GET);
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    	
    	String responseDogodek = clientDogodek.getResponse();
    	if (responseDogodek.substring(0, 2).equals("[]")) posodobitevDogodek=false;
    	else {
    		
    		jps.parsajDogodek(responseDogodek, dbh);
    	}   
    	 
    	
    	
    	// lokacija
    	 	url="http://164.8.218.3:8080/RestStoritve/resources/rest.lokacija/sync/"+dbh.vrniDatumPosodobitve(2);
    	RestClient clientLokacija = new RestClient(url);
    	clientLokacija.AddHeader("Accept", "application/json");
    	try {
    	    clientLokacija.Execute(RequestMethod.GET);
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    	 
    	String responseLokacija = clientLokacija.getResponse();
    	
    	if (responseLokacija.substring(0, 2).equals("[]")) posodobitevLokacija=false;
    	else {
    		
    	jps.parsajlokacija(responseLokacija,dbh);
    	}
    	
    	//toast
    	Context context = getApplicationContext();
    	CharSequence text = "Hello toast!";
    	int duration = Toast.LENGTH_SHORT;

    	Toast toast = Toast.makeText(context, text, duration);
    	
    	if (posodobitevDogodek==false && posodobitevKategorija==false && posodobitevLokacija==false)
    		{
    		 text = "Baza je up to date!";
        	 toast = Toast.makeText(context, text, duration);
        	 toast.show();
    			System.out.println("baza je up to date!");
    		
    		}
    	else 
    		{
	   		 text = "baza je uspešno posodobljena!";
	    	 toast = Toast.makeText(context, text, duration);
	    	 toast.show();
    		System.out.println("baza je uspešno posodobljena!");
    		}
    	
    	dbh.close();
		return true;
	}

	
	
	@Override
	public void onBackPressed() {
		if (trenutneKategorije != null) {
			if (!trenutneKategorije.getString(1).equals(zadnjaNadKategorija)) {
				DBHelper db = new DBHelper(kontekst);
				db.open();
				Cursor kategorije = db
						.vrniPrejsnjeKategorije(trenutneKategorije.getInt(2));
				db.close();

				if (kategorije == null) {
					db.open();
					kategorije = db.vrniNadkategorije();
					db.close();
				}

				setListAdapter(new SimpleCursorAdapter(kontekst, R.layout.main,kategorije, from, to));
				trenutneKategorije = kategorije;
			} else
				finish();
		} else
			finish();
	}
	

}